package start.doubudouyin.controller;

import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;
import start.doubudouyin.entity.Admininfo;
import start.doubudouyin.entity.Adminregister;
import start.doubudouyin.service.AdmininfoService;
import start.doubudouyin.service.AdminregisterService;
import start.doubudouyin.utils.MD5;
import start.doubudouyin.utils.Result;

import java.util.List;

@RestController
@RequestMapping("/adminregister")
@CrossOrigin(origins = "http://localhost:5173/")
public class AdminRegisterController {
    @Resource
    private AdmininfoService admininfoService;
    @Resource
    private AdminregisterService adminregisterService;

    //管理员注册
    @PutMapping("/adminregister")
    public Result AdminRegister(@RequestBody Adminregister adminregister){
        //命名一些变量去存储信息，便于理解
        String phone=adminregister.getPhone();
        String password=adminregister.getPassword();
        String idCard=adminregister.getIdcard();
        if(adminregisterService.isPhoneExist(phone)!=null){
            if(adminregisterService.isPass(phone)==-1){
                return Result.error("300","审核不通过，请勿重新提交!");
            }
            return Result.error("300","此手机号已申请审核，请勿重复提交!");
        }
        if(admininfoService.isPhoneExist(phone)!=null){            //检查手机号是否注册
            return Result.error("300","手机号已经被注册，请重新输入!");
        }
        //把加密后的密码存入管理员注册信息实体
        adminregister.setPassword(MD5.Encrypt(password));
        if(adminregisterService.isIdcardExist(MD5.Encrypt(idCard))!=null){
            return Result.error("300","此身份证已申请审核，请勿重复提交!");
        }
        //检查身份证是否重复
        if(admininfoService.isIdcardExist(MD5.Encrypt(idCard))!=null){
            return Result.error("300","身份证已经被注册，请检查输入!");
        }
        //把加密后的身份证存入管理员注册信息实体
        adminregister.setIdcard(MD5.Encrypt(idCard));
        //将管理员注册信息实体插入数据库
        if(adminregisterService.AdminRegisterSubmit(adminregister)>0){
            return Result.success();
        }
        return Result.error("300","注册失败，请重新输入!");
    }

    //根据审核状态查询管理员注册审核表信息
    @GetMapping("/getByPassStatus")
    public Result getByPassStatus(@RequestParam("passStatus") Integer passStatus){
        List<Adminregister> list=adminregisterService.getRegisterInfoByPassStatus(passStatus);
        if(list==null){
            return Result.error("300","获取管理员注册审核表失败!");
        }else{
            return Result.success(list);
        }
    }

    //超级管理员通过管理申请
    @PutMapping("/adminregisterpass")
    public Result AdminRegisterPass(@RequestParam("registerId") Integer registerId){
        Adminregister adminregister = adminregisterService.getRegisterInfo(registerId);
        if(adminregister==null){
            return Result.error("300","申请信息不存在，请刷新后重试!");
        }
        Admininfo admininfo = new Admininfo();
        admininfo.setPhone(adminregister.getPhone());//手机号
        admininfo.setPassword(adminregister.getPassword());//密码
        admininfo.setAdminname(adminregister.getAdminname());//姓名
        admininfo.setGender(adminregister.getGender());//性别
        admininfo.setIdcard(adminregister.getIdcard());//身份证号码
        //将adminregister除id为外所有信息插入admininfo表
        if(admininfoService.AdminRegisterPass(admininfo)>0){
            if(adminregisterService.deleteRegisterInfo(registerId)>0){
                return Result.success("审核通过",null);
            }
            return Result.error("300","服务器异常,审核失败!");
        }
        return Result.error("300","服务器异常,审核失败!");
    }

    //超级管理员拒绝管理申请
    @PutMapping("/adminregisterout")
    public Result AdminRegisterOut(@RequestParam("registerId") Integer registerId){
        //将审核状态pass_status更改为-1
        if(adminregisterService.AdminRegisterOut(registerId)>0){
            return Result.success("拒绝审核通过",null);
        }
        return Result.error("300","服务器异常,审核失败!");
    }
}
